// 任务随机消息 插件
// 最后编辑时间：2025年2月5日18:25:16

// --------------------------------------------

//                  全局配置变量

// --------------------------------------------

// 消息列表
array<string> msgList = {
    "本服务器QQ群：103510150。",
    "友情链接：QQ群955787650，392635015。",
    "友情合作伙伴：Live，星之人",
    "输入!b可购买医疗用品并查看已有金币数量。",
    "击杀不同种类丧尸可获得不同金币。",
    "1万金币可兑换1元，输入!b可查看金币数量，通过杀丧尸获得。",
    "玩游戏得金币，金币可兑换现金。",
    "金币数量相当于一个密码，是核实你身份的唯一凭证，请不要随意告诉别人。",
	"金币兑换现金时，将金币数量，steam昵称和收款二维码发给本服务器QQ群主，一般会在24小时内到账。",
	"金币兑换现金支持支付宝，微信和QQ的收款二维码。",
	"金币兑换现金后，在到帐前请不要在本服务器游戏，以免金币数量发生变化无法核实你的身份。",
	"按Y查看过往记录，鼠标滚轮翻动记录。",
	"本服务器QQ群：103510150。",
	"按Y查看过往记录，鼠标滚轮翻动记录。"
};

// --------------------------------------------

//                  全局中转变量（不要修改）

// --------------------------------------------

// 定时任务器
CSchedule@ msgTask = null;

// --------------------------------------------

//                  初始化

// --------------------------------------------


string author = "Live";
string pluginName = "TaskRandomMsg 任务随机消息-插件";
string version = "0.5";

// 插件初始化
void OnPluginInit()
{
    // 设置插件信息
    PluginData::SetAuthor(author);
    PluginData::SetName(pluginName);
    PluginData::SetVersion(version);

    // 加载提示
    ThePresident.InfoFeed("插件:"+pluginName+"| 版本:"+version+"| 作者:"+author,false);

    // 当玩家说
    Events::Player::PlayerSay.Hook( @PlayerSay );
    
    startTask(300.0f);

}

// --------------------------------------------

//                  钩子函数

// --------------------------------------------

// 当玩家说话
HookReturnCode PlayerSay(CTerrorPlayer@ pPlayer, CASCommand@ pArgs)
{
	string arg = pArgs.Arg( 1 );
	string arg1 = "";
	string arg2 = "";

	// 切分字符串(这样就可以用空格传一个命令参数了)
	int subIndex = arg.findFirst(" ",0);
	if(not (subIndex < 0)){
		arg1 = arg.substr(0,subIndex);
		arg2 = arg.substr(subIndex+1,-1);
		//Chat.PrintToChat(all,""+arg1+"|"+arg2);
	}else{
		arg1 = arg;
	}

    // 管理员才能用
    if( AdminSystem.AdminExist(pPlayer) ){
        // 开始消息任务
        if( Utils.StrEql( arg1, "!start" ) ){
            if( !Utils.StrEql( arg2, "" ) ){
                startTask(Utils.StringToFloat(arg2));
                Chat.PrintToChat(pPlayer,"{hotpink}任务已开始");
            }else{
                Chat.PrintToChat(pPlayer,"{hotpink}请加上需要定时的时间\n{green}格式提示（10秒一次）：!start 10");
            }
        }else if( Utils.StrEql( arg1, "!stop" ) ){
            // 停止定时任务器
            msgTask.Pause();
            Chat.PrintToChat(pPlayer,"{hotpink}任务已停止");
        }
    }
    return HOOK_CONTINUE;
}

// --------------------------------------------

//                  方法实现

// --------------------------------------------

// 随机消息
void randomMsg(){
    
    int randomInt = Math::RandomInt(0, msgList.length());
    string randomMsg = msgList[randomInt];
    Chat.PrintToChat(all,randomMsg);
    
}

// --------------------------------------------

//                  生命周期

// --------------------------------------------

// 当插件卸载
void OnPluginUnload()
{
    // 暂停定时任务器
    msgTask.Pause();
}

// 地图开始
void ThePresident_OnMapStart(){
    ThePresident_OnRoundStart();
}

// 回合开始
void ThePresident_OnRoundStart()
{
    if( @msgTask != null ){
        msgTask.DoTask();
    }
}

void startTask(float time){
    if( @msgTask == null ){
        @msgTask = Schedule::Create( randomMsg, time, -1 );
    }else{
        msgTask.Pause();
        @msgTask = Schedule::Create( randomMsg, time, -1 );
        msgTask.DoTask();
    }
}